from django.contrib import admin

# Register your models here.
from youpu.models import User, VerifyCode, News, Article, Question, Answer, Vote, Message, Notification, HotList, \
    Wordcloud

admin.site.site_header = '有谱吗管理系统'


class UserAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("id", 'username', 'email', "job_title", "personal_url", "location")
    '''设置过滤选项'''
    list_filter = ("job_title",)
    '''每页显示条目数'''
    list_per_page = 6
    '''设置可编辑字段'''
    list_editable = ("job_title", "personal_url", "location")
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''按发布日期排序'''
    ordering = ('-created_at',)
    '''下拉菜单修改【一对多外键】'''
    # raw_id_fields = ('',)
    '''只读属性的设置'''
    # readonly_fields = ('',)
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('username',)
    '''可搜索字段'''
    search_fields = ('username', 'email', "job_title", "location")
    '''多对多字段'''
    # filter_horizontal = ('',)


admin.site.register(User, UserAdmin)


class VerifyCodeAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("id", 'email', 'code')
    '''每页显示条目数'''
    list_per_page = 6


admin.site.register(VerifyCode, VerifyCodeAdmin)


class NewsAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ('user', 'parent', "content", "reply")
    # '''设置过滤选项'''
    list_filter = ("reply",)
    # '''每页显示条目数'''
    list_per_page = 2
    # '''设置可编辑字段'''
    list_editable = ("content",)
    # '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    # '''按发布日期排序'''
    ordering = ('-created_at',)
    # '''可搜索字段【字段类型不能是实例对象】'''
    search_fields = ('content',)
    # '''多对多字段'''
    filter_horizontal = ('liked',)


admin.site.register(News, NewsAdmin)


class ArticleAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("id", 'title', 'user', "status", "edited", "tags")
    '''设置过滤选项'''
    list_filter = ("status", "edited")
    '''每页显示条目数'''
    list_per_page = 6
    '''设置可编辑字段'''
    list_editable = ("tags",)
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''按发布日期排序'''
    ordering = ('-created_at',)
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('title',)
    '''可搜索字段[TaggableManager是个外键，不能放在搜索字段里]'''
    search_fields = ("title", "content")
    # '''多对多字段'''
    filter_horizontal = ('liked',)


admin.site.register(Article, ArticleAdmin)


# 显示多个数据表数据在同一页面上——StackedInline类
class AnswerInline(admin.StackedInline):
    model = Answer
    '''设置列表可显示的字段'''
    fields = ('user', 'content', 'is_answer')
    ordering = ('-created_at',)


class QuestionAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("id", 'user', 'title', "status", "tags", "has_answer")  # 通用外键不可展示
    '''设置过滤选项'''
    list_filter = ("status", "has_answer")
    '''每页显示条目数'''
    list_per_page = 1
    '''设置可编辑字段'''
    list_editable = ("tags",)
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''按发布日期排序'''
    ordering = ('-created_at',)
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('title',)
    '''可搜索字段'''
    search_fields = ("title", "content")
    '''将一个问题的答案都显示在一个页面上'''
    inlines = [AnswerInline, ]


admin.site.register(Question, QuestionAdmin)


class AnswerAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("user", 'question', 'content', "is_answer")
    '''设置过滤选项'''
    list_filter = ("is_answer",)
    '''每页显示条目数'''
    list_per_page = 6
    '''设置可编辑字段'''
    list_editable = ("content",)
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''按发布日期排序'''
    ordering = ('-created_at',)
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('user',)
    '''可搜索字段'''
    search_fields = ('content',)


admin.site.register(Answer, AnswerAdmin)


class VoteAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("user", 'value', 'updated_at')
    '''设置过滤选项'''
    list_filter = ("value",)
    '''每页显示条目数'''
    list_per_page = 6
    '''设置可编辑字段'''
    list_editable = ("value",)
    '''按发布日期排序'''
    ordering = ('-created_at',)
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('user',)


admin.site.register(Vote, VoteAdmin)


class MessageAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("sender", 'recipient', 'message', 'unread', 'created_at')
    '''每页显示条目数'''
    list_per_page = 8
    '''按发布日期和发送者排序'''
    ordering = ('sender', '-created_at',)
    '''设置过滤选项'''
    list_filter = ("unread",)
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('sender',)


admin.site.register(Message, MessageAdmin)


class NotificationAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("actor", 'verb', 'recipient', 'unread', 'created_at')
    '''每页显示条目数'''
    list_per_page = 8
    '''按发布日期和触发者排序'''
    ordering = ('actor', '-created_at',)
    '''设置过滤选项'''
    list_filter = ("unread", "verb")
    '''按日期月份筛选'''
    date_hierarchy = 'created_at'
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('actor',)


admin.site.register(Notification, NotificationAdmin)


class HotListAdmin(admin.ModelAdmin):
    '''设置哪些字段会显示在Admin的修改列表页面中【注意: list_display不能用在多对多字段上】'''
    list_display = ("type", 'rank', 'hot_object', 'updated_at')
    '''每页显示条目数'''
    list_per_page = 10
    '''按类型和排名值的大小进行排序'''
    ordering = ('type', 'rank',)
    '''设置过滤选项'''
    list_filter = ("type", )
    '''设置带链接字段【可以控制list_display中的字段直接链接到对象的“更改"页面】'''
    list_display_links = ('hot_object',)


admin.site.register(HotList, HotListAdmin)

admin.site.register(Wordcloud)  # 由于Wordcloud模型仅是为了存储数据，所以此处就不定义注释器了
